package com.lgmshare.k3.helper;

import android.content.Context;
import android.os.Environment;

import com.lgmshare.component.utils.DatetimeUtils;
import com.lgmshare.component.utils.FileUtils;
import com.lgmshare.component.utils.UIUtils;
import com.lgmshare.k3.K3Config;

import java.io.File;

/**
 * @author lim
 * @description: TODO
 * @email lgmshare@gmail.com
 * @datetime 2016/2/15 11:42
 */
public class PathConfigurationHelper {


    /**
     * 通过Context.getExternalFilesDir()方法可以获取到 SDCard/Android/data/你的应用的包名/files/ 目录，一般放一些长时间保存的数据
     * 通过Context.getExternalCacheDir()方法可以获取到 SDCard/Android/data/你的应用包名/cache/目录，一般存放临时缓存数据
     * 如果使用上面的方法，当你的应用在被用户卸载后，SDCard/Android/data/你的应用的包名/ 这个目录下的所有文件都会被删除，不会留下垃圾信息。
     * 而且上面二个目录分别对应 设置->应用->应用详情里面的”清除数据“与”清除缓存“选项
     */

    public static String getLogDir() {
        if (FileUtils.isSDCardMounted()) {
            File externalFilesDir = UIUtils.getContext().getExternalFilesDir(K3Config.FILE_DIR_LOG);
            if (externalFilesDir != null) {
                return externalFilesDir.getAbsolutePath();
            } else {
                return Environment.getExternalStorageDirectory().getPath() + "/" + K3Config.TAG + "/" + K3Config.FILE_DIR_LOG;
            }
        }
        return UIUtils.getContext().getDir(K3Config.FILE_DIR_LOG, Context.MODE_PRIVATE).getAbsolutePath();
    }

    public static String getFileDir() {
        if (FileUtils.isSDCardMounted()) {
            File externalFilesDir = UIUtils.getContext().getExternalFilesDir(K3Config.FILE_DIR_DOWNLOAD);
            if (externalFilesDir != null) {
                return externalFilesDir.getAbsolutePath();
            } else {
                return Environment.getExternalStorageDirectory().getPath() + "/" + K3Config.TAG + "/" + K3Config.FILE_DIR_DOWNLOAD;
            }
        }
        return UIUtils.getContext().getDir(K3Config.FILE_DIR_DOWNLOAD, Context.MODE_PRIVATE).getAbsolutePath();
    }

    public static String getPhotoDir() {
        if (FileUtils.isSDCardMounted()) {
            File externalFilesDir = UIUtils.getContext().getExternalFilesDir(K3Config.FILE_DIR_IMAGE);
            if (externalFilesDir != null) {
                return externalFilesDir.getAbsolutePath();
            } else {
                return Environment.getExternalStorageDirectory().getPath() + "/" + K3Config.TAG + "/" + K3Config.FILE_DIR_IMAGE;
            }
        }
        return UIUtils.getContext().getDir(K3Config.FILE_DIR_IMAGE, Context.MODE_PRIVATE).getAbsolutePath();
    }

    /**
     * SDCard/Android/data/你的应用的包名/files/ 目录(长时间保存的数据)
     *
     * @param prefix  文件名前缀
     * @param postfix 文件名后缀
     * @return prefix + "_" + DateUtil.getCurrentTimestamp() + "." + postfix
     * @see .util.RandomUtil
     */
    public static String getFilePathOfExternal(Context context, String prefix, String postfix) {
        return FileUtils.getExternalFilePath(context, "", getFileName(prefix, postfix));
    }

    /**
     * SDCard/Android/data/你的应用的包名/cache/ 目录(短时间时间保存的数据)
     *
     * @param prefix  文件名前缀
     * @param postfix 文件名后缀
     * @return prefix + "_" + DateUtil.getCurrentTimestamp() + "." + postfix
     * @see .util.RandomUtil
     */
    public static String getCachePathToExternal(Context context, String prefix, String postfix) {
        return FileUtils.getExternalCachePath(context, "", getFileName(prefix, postfix));
    }

    /**
     * 内部存储路径
     *
     * @param prefix  文件名前缀
     * @param postfix 文件名后缀
     * @return prefix + "_" + DateUtil.getCurrentTimestamp() + "." + postfix
     * @see .util.RandomUtil
     */
    public static String getFilePathToInternal(Context context, String prefix, String postfix) {
        return FileUtils.getInternalFilePath(context, "", getFileName(prefix, postfix));
    }

    /**
     * 内部存储路径
     *
     * @param prefix  文件名前缀
     * @param postfix 文件名后缀
     * @return prefix + "_" + DateUtil.getCurrentTimestamp() + "." + postfix
     * @see .util.RandomUtil
     */
    public static String getCachePathToInternal(Context context, String prefix, String postfix) {
        return FileUtils.getInternalCachePath(context, "", getFileName(prefix, postfix));
    }

    private static String getFileName(String prefix, String postfix) {
        return String.format("%s_%s.%s", prefix, DatetimeUtils.getCurrentTimestamp(), postfix);
    }
}
